package com.yy.redisCache.controller;

import com.yy.redisCache.pojo.RedisTest;
import com.yy.redisCache.service.impl.RedisTestServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @author young
 * @date 2022/9/4 13:13
 * @description:
 */
@RestController
@RequestMapping("/Cache")
@Slf4j
public class RedisCacheController {
    @Autowired
    private RedisTestServiceImpl service;

    /**
     * 删除指定id以下的所有数据及缓存
     * @param id id
     * @return
     */
    @DeleteMapping("/del/{id}")
    public Boolean remove(@PathVariable Integer id){
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i <= id; i++) {
            list.add(i);
        }
       return service.removeByIds(list);
    }

    /**
     * 更新数据
     * @param redisTest 更新对象
     * @return
     */
    @PutMapping("/update")
    public Boolean update(RedisTest redisTest){
        return service.updateById(redisTest);
    }

    /**
     * 测试从数据库/缓存获取10000条数据的时间
     * @return
     */
    @GetMapping("/get")
    public List<RedisTest> getBody(){
        Long startTime = System.currentTimeMillis();
        List<RedisTest> list = service.list();
        //第一次存入数据库查询3875ms  第二次缓存查询：1131ms
        log.info("查询时间10000条数据的时间是：{}",System.currentTimeMillis()-startTime);
        return list;
    }

    /**
     * 批量获取指定的数据
     * @param id
     * @return
     */
    @GetMapping("/getOne/{id}")
    public String getOne(@PathVariable Integer... id){
        List<RedisTest> ids = service.listByIds(Arrays.asList(id));
        return ids.isEmpty()?"获取成功":"获取失败";
    }
}
